package com.psiqueware.alheli.dao.hibernate;

/**
 * Excepci&oacute;n que sucede si hay un problema inicializando hibernate.
 * <br/>Paquete Original: com.psiqueware.alheli.dao.hibernate
 * <br/>Nombre  Original: HibernateServiceException
 * <br/><a href="HibernateServiceException.java.html"><i>Ver C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@psiqueware.com">&Aacute;ngel El&eacute;ctrico</a>
 * @version Revision: 1.1 28-07-09
 * @noinspection ClassWithoutNoArgConstructor, ClassWithoutLogger, ClassTooDeepInInheritanceTree, ClassWithTooManyConstructors, DeserializableClassInSecureContext, SerializableClassInSecureContext
 */

public final class HibernateServiceException extends RuntimeException
{

    /**
     * @noinspection FieldNameHidesFieldInSuperclass
     */
    public static final String STANDARD_MSG = "<error>Hubo un error en el servicio de hibernate.</error>";

    /**
     * Object que nos puede proporcionar mas informaci&oacute;n sobre lo sucedido.
     */
    private Object m_object = null;

    /**
     * Constructor for HibernateServiceException.
     */
    public HibernateServiceException()
    {
        super(STANDARD_MSG);
    }

    /**
     * Constructor for HibernateServiceException.
     *
     * @param message que se pretende contenga la excepci&oacute;n.
     */
    public HibernateServiceException(String message)
    {
        super(message);
    }

    /**
     * Constructor for HibernateServiceException.
     *
     * @param message que se pretende contenga la excepci&oacute;n.
     * @param o       objeto del error.
     */
    public HibernateServiceException(String message, Object o)
    {
        super(message);
        this.m_object = o;
    }

    /**
     * Constructor for HibernateServiceException.
     *
     * @param message que se pretende contenga la excepci&oacute;n.
     * @param cause   excepci&oacute;n que origin&oacute; esta.
     */
    public HibernateServiceException(String message, Throwable cause)
    {
        super(message, cause);

    }

    /**
     * Constructor for HibernateServiceException.
     *
     * @param message que se pretende contenga la excepci&oacute;n.
     * @param cause   excepci&oacute;n que origin&oacute; esta.
     * @param o       objeto del error.
     */
    public HibernateServiceException(String message, Throwable cause, Object o)
    {
        super(message, cause);
        this.m_object = o;

    }

    /**
     * Constructor for HibernateServiceException.
     *
     * @param cause excepci&oacute;n que origin&oacute; esta.
     */
    public HibernateServiceException(Throwable cause)
    {
        super(STANDARD_MSG, cause);
    }

    /**
     * Constructor for HibernateServiceException.
     *
     * @param cause excepci&oacute;n que origin&oacute; esta.
     * @param o     objeto del error.
     */
    public HibernateServiceException(Throwable cause, Object o)
    {
        super(STANDARD_MSG, cause);
        this.m_object = o;
    }

    /**
     * Convierte este {@link HibernateServiceException} a su representaci&oacute;n textual.
     *
     * @noinspection DuplicateStringLiteralInspection
     */
    public String toString()
    {

        StringBuffer sb = new StringBuffer();
        sb.append("\n<Instance Class = '").append(this.getClass()).append("'>\n");
        sb.append("\t<super>").append(super.toString()).append("</super>\n");
        sb.append("\t<object>").append(m_object).append("</object>\n");
        sb.append("</Instance>");
        return sb.toString();
    }

    /**
     * Devuelve el objeto que puede proporcionarnos mas informaci&oacute;n sobre el porque sucedi&oacute; esta
     * excepci&oacute;n.
     */
    public Object getObject()
    {
        return m_object;
    }

    /**
     * Establece el objeto que puede proporcionarnos mas informaci&oacute;n sobre el porque sucedi&oacute; esta
     * excepci&oacute;n.
     */
    public void setObject(Object object)
    {
        this.m_object = object;
    }
}

